#-*- codeing = utf-8 -*-
#@Time : 2020/10/30 15:30
#@Author : 阳某
#@File : 08.热力图查看两个分类变量之间的强度分布.py
#@Software : PyCharm


'''
热力图(heat map)
热力图（或者色块图），由小色块组成的二维图表，其中：

x、y轴可以是分类变量，对应的小方块由连续数值表示颜色强度
即用两个分类字段确定数值点的位置，用于展示数据的分布情况

'''

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

sns.set()
sns.set_style('whitegrid', {'font.sans-serif':['simhei', 'Arial']})

# 实例1：模拟绘制北京景区热度图
df = pd.DataFrame(
    np.random.rand(4, 7),
    index = ["天安门", "故宫", "奥林匹克森林公园", "八达岭长城"],
    columns = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
)
print(df)
plt.figure(figsize=(10, 4))
sns.heatmap(df, annot=True, fmt = ".2f", cmap = "coolwarm")
# plt.show()


# 实例2：绘制泰坦尼克事件与存亡变量的关系
# 读取并合并泰坦尼克数据
df = pd.concat(
    [
        pd.read_csv("./datas/titanic/titanic_train.csv"),
        pd.read_csv("./datas/titanic/titanic_test.csv")
    ]
)
print(df.head())
print(df.info())
# pands把字符串类型的列，变成分类数字编码
for field in ["Sex", "Cabin", "Embarked"]:
    df[field] = df[field].astype("category").cat.codes


print(df.info())
print(df.head(3))
# 计算不同变量之间两两相关系数
print(df.corr())
plt.figure(figsize=(12, 6))
sns.heatmap(df.corr(), annot=True, fmt = ".2f", cmap = "coolwarm")
plt.show()
